/* Copyright (c) 2009 SpringShowcase, Inc.
 * All right reserved.
 * http://code.google.com/p/springshowcase/
 * This software is the confidential and proprietary information of BeyondWeb
 * , Inc. You shall not disclose such Confidential Information and
 * shall use it only in accordance with the terms of the license agreement
 * you entered into with BeyondWeb.
 *
 * Revision History
 * Author              Date             Description
 * ------------------   --------------    ------------------
 *  taeki.kim           2010. 4. 2.        
*/
package org.springshowcase.core.commons.utils;

import org.apache.commons.beanutils.PropertyUtilsBean;
import org.apache.commons.lang.builder.ReflectionToStringBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 자바 빈즈를 사용하는 유틸리티
 * 
 * 기본적으로 Apache Commons BeansUtils 라이브러를 Wrapping 해서 사용 한다.
 * 
 * @author kim.tae.ki
 * @version
 * @see This file contains the declarations of String class and its helper
 * classes.
 */
public class BeansUtils {

    // ---------------------------------------------------------------------
    // Class Variable Declaration
    // ---------------------------------------------------------------------
    
    /** 클래스에서 사용하는 로거. */
    private static final Logger logger = LoggerFactory.getLogger(BeansUtils.class);

    // ---------------------------------------------------------------------
    // Constructor Method Declaration
    // ---------------------------------------------------------------------
    // ---------------------------------------------------------------------
    // DI Method (setter,getter) Declaration
    // ---------------------------------------------------------------------
    // ---------------------------------------------------------------------
    // this Method (public/private) Declaration
    // ---------------------------------------------------------------------

    /**
     * Domain 멤버 변수를 다른 Domain 변수로 복사한다.
     * 같은 타입의 오브젝트로 구성된 서로 다른 도메인의 멤버 변수를 복사 한다.
     * 반드시 setter/getter 함수가 선언 되어야 한다.
     * 
     * @param dest the dest
     * @param orig the orig
     * 
     * @throws Exception the exception
     */
    public static final void copyProperties(Object dest, Object orig) throws Exception {
        PropertyUtilsBean propertyUtilsBean = new PropertyUtilsBean();
        propertyUtilsBean.copyProperties(dest, orig);
    }

    /**
     * 도메인의 멤버 속성을 출력 한다.
     * 자바 리플렉션을 통해서 해당 멤버 변수의 내용을 출력 한다.
     * 멤버 변수가 일반 클래스 Type로 선언되어 있어도 출력이 가능 하다.
     * 도메인 값 체크시 사용하면 유용 하다.
     * 
     * @param bean the bean
     * 
     * @return the string
     */
    public static final String toStringBean(Object bean) {
        if(bean == null) {
            return "";
        }
        return ReflectionToStringBuilder.toString(bean);
    }

    // ---------------------------------------------------------------------
    // interface implement Method (public/private) Declaration
    // ---------------------------------------------------------------------
    // ---------------------------------------------------------------------
    // abstract implement Method (public/private) Declaration
    // ---------------------------------------------------------------------
    // ---------------------------------------------------------------------
    // abstract Method (public/private) Declaration
    // ---------------------------------------------------------------------
    
}
